
let x = true ;
console.log( x , typeof( x ) ); // true boolean

// 自动装箱: 
// 当通过 原生类型 来访问属性或调用函数时，会首先将 原生类型的值 包装成其相应对象的实例
// boolean -----> Boolean
let y = x.toString(); // 这里调用的 toString 实际上是 Boolean.prototype 提供的
console.log( y , typeof( y ) ); // true

// 及时之前发生过 自动装箱 ，也不会影响 x 变量的值 (即变量x中仍然是原生类型)
console.log( x , typeof( x ) ); // true boolean

console.log( '- - - - - - - - - - - - - - - - - -' );

let o = new Boolean( [] );
console.log( o.toString() ); // Boolean.prototype.toString
console.log( o , typeof( o ) );

// 手动拆箱:
// 通过实例的valueOf函数可以获得封装在实例内部的原生值
let t = o.valueOf(); // 获得包裹在实例(instance)内部的原生类型的值
console.log( t , typeof( t ) );
